\section{Media Access Control}
Tema central: forma de asignar un solo canal de difusión entre usuarios
competidores.

\subsection{Asignación Estática de canal en LANs y MANs}
La manera tradicional de asignar un solo canal, entre varios usuarios 
es FDM (Frequency Division Multiplexing). 
Si hay N usuarios, el ancho de banda se divide en N partes de igual 
tamaño, y a cada usuario se le asigna una parte. 
Dado que cada usuario tiene una banda de frecuencia privada, no hay 
interferencia entre los usuarios. 
Cuando sólo hay una pequeña cantidad fija de usuarios, cada uno de 
los cuales tiene (en buffer) una carga de tráfico pesada, FDM es un 
mecanismo de asignación sencillo y eficiente. 
Sn embargo, cuando el número de emisores es grande y varía 
continuamente, o cuando el tráfico se hace en ráfagas, FDM presenta 
algunos problemas. 
Si el espectro se divide en N regiones, y hay menos de N usuarios 
interesados en comunicarse actualmente, se desperdiciará una gran 
parte del espectro. 
Si más de N usuarios quieren comunicarse, a algunos de ellos se les 
negará el permiso por falta de ancho de banda, aún cuando algunos de 
los usuarios que tengan asignada una banda de frecuencia apenas 
transmitan o reciban algo.
Aún suponiendo que el número de usuarios podría, de alguna manera, 
mantenerse constante en N, dividir el canal disponible en subcanales 
estáticos es inherentemente ineficiente. 
El problema básico es que, cuando algunos usuarios están inactivos, 
su ancho de banda simplemente se pierde. 
No lo están usando, y a nadie más se le permite usarlo. 
Además, en casi todos los sistemas de cómputo el tráfico de datos 
se hace en ráfagas. 
En consecuencia, la mayoría de los canales estarán inactivos casi 
todo el tiempo.
Precisamente los mismos argumentos que se aplican a TDM 
(Time Division Multiplexing). 
A cada usuario se le asigna cada N-ésima ranura de tiempo. 
Si un usuario no usa su tiempo, simplemente se desperdicia.


\subsection{Asignación Dinámica de canal en LANs y MANs}
Problema de la asignación. Supuestos:

\begin{enumerate}
    \item   \textbf{Modelo de estación}\newline
            N estaciones (terminales) independientes, cada una con un 
            programa o usuario que genera tramas para transmisión. 
            Una vez que se ha generado una trama, la estación se 
            bloquea y no hace nada hasta que la trama se ha transmitido 
            con éxito.
    \item   \textbf{Canal Único}\newline
            Hay un solo canal disponible para todas las comunicaciones. 
            Todas las estaciones pueden transmitir y recibir en él. 
            En cuanto al hardware, todas las estaciones son 
            equivalentes, aunque el software del protocolo puede 
            asignarles prioridades.  
    \item   \textbf{Colisión}\newline
            Si dos tramas se transmiten en forma simultánea, se 
            solapan en el tiempo y la señal resultante se altera. 
            Este evento se llama colisión. 
            Todas las estaciones pueden detectar colisiones. 
            Una trama en colisión debe transmitirse nuevamente. 
            No hay otros errores excepto aquellos generados por las 
            colisiones. 
    \item   \textbf{Tiempo}\newline
            Puede ser continuo (la transmisión de una trama puede 
            comenzar en cualquier momento), o ranurado (el tiempo se 
            divide en intervalos discretos (time slots). 
            La transmisión de las tramas siempre comienza al inicio de 
            un time-slot. 
            Un time-slot puede contener 0, 1 o más tramas, 
            correspondientes a un time-slot inactivo, una transmisión 
            con éxito o una colisión, respectivamente.)
    \item   \textbf{Carrier Sense}\newline
            Las estaciones pueden saber si el canal está en uso antes 
            de intentar usarlo (en cuyo caso, si está siendo usado no 
            se intenta usar); o no y simplemente se transmite (y se 
            sabe después si la transmisión tuvo éxito o no).            
\end{enumerate}

\paragraph{Carrier Sense Multiple Access (CSMA)}
Cuando una estación tiene datos por transmitir, primero escucha el 
canal para saber si otra está transmitiendo en ese momento. 
Si el canal está ocupado, la estación espera hasta que se desocupa. 
Cuando la estación detecta un canal inactivo, transmite una trama. 
Si ocurre una colisión, la estación espera una cantidad aleatoria 
de tiempo y comienza de nuevo. 
El protocolo se llama persistente-1 porque la estación transmite 
con una probabilidad de 1 cuando encuentra que el canal está inactivo. 
El propagation delay tiene un efecto importante en el desempeño 
del protocolo. 
Hay una pequeña posibilidad de que, justo después de que una estación 
comienza a transmitir, otra estación esté lista para enviar.
Si la señal de la primera estación no ha llegado aún a la segunda, 
esta última detectará un canal inactivo y comenzará a enviar también, 
lo que dará como resultado una colisión. 
Cuanto mayor sea el tiempo de propagación, más importante será este 
efecto, y peor el desempeño del protocolo. 

Una variación es el protocolo p-persistente, que, cuando detecta libre 
el canal transmite una trama con probabilidad p. 

\paragraph{CSMA With Collision Detection (CSMA/CD)}
Una vez que una estación detecta una colisión, aborta la transmisión, 
espera un tiempo aleatorio e intenta de nuevo, suponiendo que ninguna 
otra estación ha comenzado a transmitir durante ese lapso.
Si dos estaciones comienzan a transmitir en el mismo momento, ¿cuánto 
tiempo tardan en darse cuenta de que ocurrió una colisión?
La respuesta a esta pregunta es vital para determinar la longitud del 
periodo de contención y, por lo tanto, el delay y la velocidad real 
de transporte. 
El tiempo mínimo para detectar la colisión es sólo el tiempo que tarda 
la señal para propagarse de una estación a otra. 

Una estación emisora debe monitorear de manera continua el canal en 
busca de ráfagas de ruido que puedan indicar una colisión. 
Por esta razón, CSMA/CD con un solo canal es inherentemente un 
sistema semiduplex. 
Es imposible que una estación transmita y reciba tramas al mismo 
tiempo, debido a que la lógica de recepción está en uso, en busca 
de colisiones durante cada transmisión. 

\subsection{Protocolos de LANs inalámbricas}

Una configuración común para una LAN inalámbrica es un edificio 
de oficinas con estaciones base (access points) ubicadas 
estratégicamente en distintas partes del edificio. 
Todas las estaciones base están interconectadas mediante cobre o fibra. 

Suposición de simplificación: todos los emisores de radio tienen 
algún alcance fijo. 
Cuando un receptor está dentro del alcance de dos emisores activos, 
la señal resultante por lo común se altera y resulta inútil, en 
otras palabras, ya no se consideran los sistemas de tipo CDMA. 
En algunas LANs inalámbricas no todas las estaciones están 
dentro del alcance de todas las demás, lo que conduce a una variedad 
de complicaciones. 

\paragraph{}
Un enfoque para usar una LAN inalámbrica podría ser intentar el 
CSMA; escuchar si hay otras transmisiones y sólo transmitir si nadie 
más lo está haciendo. 
El problema radica en que este protocolo no es realmente adecuado 
porque lo que importa es la interferencia en el receptor, no en el 
emisor. 

\begin{figure}[H]\centering
\includegraphics[scale=0.07]{./img/mac-transmitting.png}
\end{figure}

Para ver el problema considerar el ejemplo de la imagen en el que 
se tienen cuatro estaciones inalámbricas.
El alcance de radio es tal que A y B están en el mismo alcance y 
potencialmente pueden interferir entre sí. 
C también podría interferir tanto con B como con D, pero no con A.

\paragraph{Cuando A está transmitiendo hacia B.}
Si C detecta el medio, no podrá escuchar a A porque está fuera de su 
alcance y, por tanto, deducirá falsamente que puede transmitir a B. 
Si C comienza a transmitir, interferirá en B, eliminando la trama de A. 
El problema de que una estación no puede detectar a un competidor 
potencial por el medio, puesto que dicho competidor está demasiado 
lejos, se denomina problema de \textsl{estación oculta}. 

\paragraph{Cuando B está transmitiendo hacia A.}
Si C detecta el medio, escuchará una transmisión y concluirá 
equivocadamente que no puede enviar a D, cuando de hecho tal 
transmisión causaría una mala recepción sólo en la zona entre B y C, 
en la que no está localizado ninguno de los receptores pretendidos. 
Esta situación se denomina problema de \textsl{estación expuesta}. 

\paragraph{}
El problema es que antes de comenzar una transmisión, una estación 
realmente necesita saber si hay actividad o no alrededor del receptor. 
El CSMA simplemente le indica si hay o no actividad alrededor de la 
estación que está detectando la portadora. 
Con un cable, todas las señales se propagan a todas las estaciones, 
de manera que sólo puede llevarse a cabo una transmisión en un 
momento dado en cualquier lugar del sistema. 
En un sistema basado en ondas de radio de corto alcance, pueden 
ocurrir transmisiones simultáneas si las ondas tienen destinos 
diferentes y éstos están fuera de alcance entre sí. 


% What The Fuck: Quienes creen en la reencarnación piensan que Charles 
% Darwin regresó como miembro de la Asociación de Estándares del IEEE 
% para eliminar a los débiles.

\subsection{Ethernet}
Comúnmente se usan cuatro tipos de cableado

\begin{table}[H]
\begin{tabular}{c|l|c|c|c}
    Nombre  &   Cable           &   Segmento Máximo &   
                \#Nodos & Ventajas \\
    \hline 
    10Base5 &   Coaxial grueso  &   500 m   &   100     &
                Cable original; ahora obsoleto. \\
    10Base2 &   Coaxial delgado &   185 m   &   30      &
                No se necesita hub. \\
    10Base-T &  Par trenzado    &   100 m   &   1024    &   
            Sistema más económico. \\
    10Base-F &  Fibra óptica    &   2000 m  &   1024    & 
            Funciona mejor entre edificios.
\end{tabular}
\end{table}

donde \#Nodos significa Cantidad de nodos por Segmento

%Manchester
%
%Ninguna de las versiones de Ethernet utiliza codificación binaria 
%directa con 0 voltios para un bit 0 y 5 voltios para un bit 1, pues 
%conduce a ambigüedades. 
%Si una estación envía la cadena de bits 0001000, otros podrían 
%interpretarla falsamente como 10000000 o 01000000, pues no pueden 
%distinguir entre un emisor inactivo (0 voltios) y un bit 0 (0 voltios). 
%Este problema se puede resolver utilizando +1 voltios para un 1 y 
%−1 voltios para un 0, pero aún está el problema de que un receptor 
%muestree la señal a una frecuencia ligeramente distinta a la que haya 
%utilizado el emisor para generarla. 
%Las diferentes velocidades de reloj pueden causar que el receptor y el 
%emisor pierdan la sincronía respecto a dónde están los límites de bits, 
%especialmente después de una serie larga de 0s consecutivos o una 
%serie larga de 1s consecutivos. 
%Lo que se necesita es un mecanismo para que los receptores determinen 
%sin ambigüedades el comienzo, el final o la mitad de cada bit sin 
%referencia a un reloj externo. 
%Dos de tales enfoques se llaman codificación Manchester y 
%codificación Manchester diferencial. 
%En la codificación Manchester, cada periodo de bit se divide en dos 
%intervalos iguales. 
%Un bit 1 binario se envía teniendo el voltaje alto durante el primer 
%intervalo y bajo durante el segundo. 
%Un 0 binario es justo lo inverso: primero bajo y después alto. 
%Este esquema asegura que cada periodo de bit tenga una transición a 
%la mitad, facilitando que el receptor se sincronice con el emisor. 
%Una desventaja de la codificación Manchester es que requiere el doble 
%de ancho de banda que la codificación binaria directa, pues los pulsos 
%son de la mitad de ancho.
%La codificación Manchester diferencial es una variación de la 
%codificación Manchester básica. 
%En ella, un bit 1 se indica mediante la ausencia de una transición 
%al inicio del intervalo. 
%Un bit 0 se indica mediante la presencia de una transición al 
%inicio del intervalo. 
%En ambos casos también hay una transición a la mitad. 
%El esquema diferencial requiere equipo más complejo, pero ofrece 
%mejor inmunidad al ruido. 
%Todos los sistemas Ethernet usan codificación Manchester debido a 
%su sencillez.

\newpage
\subsection{El protocolo de subcapa MAC de Ethernet}
\noindent Frame: \newline
%Preámbulo | S o f | Dirección de Destino | Dirección de Origen | Longitud | Datos | Padding | Checksum
\begin{verbatim}
Preámbulo | Dir Destino | Dir Origen | Tipo |  Datos | Padding | Checksum
    8     |      6      |      6     |   2  | 0-1500 |   0-46  |    4
\end{verbatim}

Cada trama inicia con un Preámbulo de 8 bytes, cada uno de los 
cuales contiene el patrón de bits 10101010. 
La codificación Manchester de este patrón produce una onda 
cuadrada de 10 MHz para 6.4 $\mu$ seg para permitir que el reloj del 
receptor se sincronice con el del emisor. 
Se les pide que permanezcan sincronizados por el resto de la trama, 
utilizando la codificación Manchester para mantener un registro de 
los límites de bits. 
La trama contiene dos direcciones, una para el destino y una para el 
origen. 

\paragraph{}
El bit de orden mayor de la dirección de destino es 0 para 
direcciones ordinarias y 1 para direcciones de grupo. 
Las direcciones de grupo permiten que varias estaciones escuchen en 
una sola dirección. 
Cuando una trama se envía a una dirección de grupo, todas las 
estaciones del grupo la reciben. 
El envío a un grupo de estaciones se llama multicast. 
La dirección que consiste únicamente en bits 1 está reservada 
para broadcast. 
Una trama que contiene sólo bits 1 en el campo de destino se acepta 
en todas las estaciones de la red. 
La diferencia entre broadcast y multicast es lo suficientemente 
importante para garantizar la repetición. 
Una trama de multicast se envía a un grupo seleccionado de estaciones 
de la red; una trama de broadcast se envía a todas las 
estaciones de la red. 
Multicast es más selectivo, pero involucra el manejo de grupos. 
Broadcast es menos sofisticado, pero no requiere manejo de grupos.


Tipo: indica al receptor qué hacer con la trama.


Además de haber una longitud de trama máxima, también hay una 
longitud mínima. 
Si bien algunas veces un campo de datos de 0 bytes es útil, 
causa problemas. 
Cuando un receptor detecta una colisión, trunca la trama actual, 
lo que significa que los bits perdidos y las piezas de las tramas 
aparecen todo el tiempo en el cable. 
Para que Ethernet pueda distinguir con facilidad las tramas válidas 
de la basura, necesita que dichas tramas tengan una longitud 
de por lo menos 64 bytes. Se usa el campo de relleno en caso de ser 
necesario para llegar al tamaño mínimo.

%Bla bla explicación de por qué hace falta esta restricción.

Si una estación intenta transmitir una trama muy corta, es 
concebible que ocurra una colisión, pero la transmisión se completa 
antes de que la ráfaga de ruido llegue de regreso, en el momento 2t. 
El emisor entonces supondrá incorrectamente que la trama se 
envió con éxito. 
Para evitar que esta situación ocurra, todas las tramas deberán 
tardar más de 2t para enviarse, de manera que la transmisión aún 
esté llevándose a cabo cuando la ráfaga de ruido regrese al emisor. 
Para una LAN de 10 Mbps con una longitud máxima de 2500 metros y 
cuatro hubs (de la especificación 802.3), el tiempo de ida y 
vuelta (incluyendo el tiempo de propagación a través de los hubs) 
se ha determinado a aproximadamente 50 $\mu$seg en el peor caso.


Checksum: código de hash de 32 bits de los datos. 
Si algunos bits de datos se reciben erróneamente (debido a ruido 
en el cable), es casi seguro que el checksum está mal, y se 
detectará el error. 
El algoritmo de suma de verificación es un CRC.
Simplemente realiza detección de errores, no forward error correction.

\subsection{Exponential Backoff}
Determina cu\'anto hay que esperar antes de intentar enviar de 
nuevo despu\'es de una colisi\'on. 

Tras la primera colisión, cada estación espera 0 o 1 slot times 
antes de intentarlo de nuevo. 
Si dos estaciones entran en colisión y ambas elijen el mismo número 
aleatorio, habrá una nueva colisión. 
Después de la segunda colisión, cada una elige 0, 1, 2 o 3 al azar y 
espera ese número de slot times.
En general, tras i colisiones, se elige un número aleatorio entre 
0 y $2^i - 1$2. 
Tras haberse alcanzado 10 colisiones, el intervalo de aleatorización 
se congela en un máximo de 1023 slots. 
Tras 16 colisiones, se deja de intentar.

Este algoritmo fue elegido para adaptar en forma dinámica el número 
de estaciones que intentan transmitir.

%\subsection{Switched Ethernet}
%Para lidiar con el incremento de carga en una red Ethernet se pueden 
%usar switches.
%Cuando una estación quiere transmitir una trama Ethernet, la envía 
%al switch.

%Fast y Gigabit Ethernet los saltee

%\subsection{LANs Inalámbricas}
%Pueden funcionar con o sin estación base.
%
%\paragraph{Pila de Protocolos de 802.11}

%No dice nada interesante

\subsection{Virtual LANs (VLANs)}
Para utilizar VLANs se deben configurar switches que soporten trabajar 
con VLANs. Se establecen las tablas de configuiración que indican 
cuáles LANs se pueden acceder a través de cuáles puertos.

Por simplicidad, considerar que cada LAN tiene un color.
¿Cómo saben los switches qué color tiene las tramas?
Se pueden asignar colores a cada
\begin{enumerate}
    \item   Puerto.
    \item   Dirección MAC.
    \item   Protocolo de capa 3 o dirección IP.
\end{enumerate}

El primer método sólo funciona si todas las máquinas de un puerto 
pertenecen a la misma VLAN.

\paragraph{Standard 802.1Q}
Se cambió el encabezado de Ethernet, y ahora contiene una etiqueta 
VLAN.
Los campos VLAN sólo son utilizados por los switches y no por las 
máquinas de los usuarios.
El emisor no genera los campos VLAN, sino que los hacen los switches. 
El primero en recibir una trama los agrega, y el último los remueve.



















 











